package beanstao.util.store.dal.interfaces;

import beanstao.util.id.Id;
import beanstao.util.store.domainobject.DomainList;
import beanstao.util.store.domainobject.XmlDomain;


/**
 * XmlTree数据的Query功能接口(基础接口，复杂查询需继承重新定义)。<br>
 * @author beanstao@google.com 
 * @version 1.5
 * @date 2010-08-11 17:28:17
 * @param <T> DomainObject
 */
public interface IDomainXmlTreeSelect<T extends XmlDomain>
{

	/**
	 * 根据指定父级ID查询子集合(仅子集合，不含孙子及更深的集合)
	 * @param parentId 指定父级ID
	 * @return
	 */
	DomainList<T> selectElements(Id parentId);

	/**
	 * 根据指定父级ID查询子,孙等所有集合
	 * @param parentId 指定父级ID
	 * @return
	 */
	DomainList<T> selectChilds(Id parentId);

	/**
	 * 根据指定ID查询祖先(所有)
	 * @param ownerId 指定ID
	 * @return
	 */
	DomainList<XmlDomain> selectAncestor(Id ownerId);

	/**
	 * 查找指定节点的子节点指定的属性值
	 * @param id
	 * @param attrName
	 * @return
	 */
	DomainList<XmlDomain> childAttributes(Id id, String attrName);

	/**
	 * 查找指定节点的子(非子孙)节点指定的属性值
	 * @param id
	 * @param attrName
	 * @return
	 */
	DomainList<XmlDomain> elementAttributes(Id id, String attrName);

	/**
	 * 根据指定ID查询父级
	 * @param ownerId 指定ID
	 * @return
	 */
	XmlDomain selectParent(Id ownerId);

	/**
	 * 根据父ID判断其节点下是否存在有指定的属性名与属性值的节点
	 * @param parentId
	 * @param attrubuteName
	 * @param attrubuteValue
	 * @return
	 */
	boolean existElement(Id parentId, String attrubuteName, String attrubuteValue);

	/**
	 * 根据父ID判断其节点下是否存在有指定的子ID的节点
	 * @param parentId
	 * @param elementId
	 * @return
	 */
	boolean existElement(Id parentId, Id elementId);

}
